import fs from 'fs';
import path from 'path';
import sharp from 'sharp';
import toIco from 'to-ico';
import { fileURLToPath } from 'url';
import { dirname } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

// Tauri 需要的图标配置
const tauriIcons = [
  { size: 32, filename: '32x32.png' },
  { size: 128, filename: '128x128.png' },
  { size: 128, filename: '128x128@2x.png', scale: 2 }, // 实际上是 256x256
  { size: 107, filename: 'Square107x107Logo.png' },
  { size: 142, filename: 'Square142x142Logo.png' },
  { size: 150, filename: 'Square150x150Logo.png' },
  { size: 284, filename: 'Square284x284Logo.png' },
  { size: 30, filename: 'Square30x30Logo.png' },
  { size: 310, filename: 'Square310x310Logo.png' },
  { size: 44, filename: 'Square44x44Logo.png' },
  { size: 71, filename: 'Square71x71Logo.png' },
  { size: 89, filename: 'Square89x89Logo.png' },
  { size: 128, filename: 'StoreLogo.png' }
];

// 源图片路径和输出目录
const sourceImagePath = path.join(__dirname, '../public/logo.png');
const tauriIconsDir = path.join(__dirname, '../src-tauri/icons');

async function generateTauriIcons() {
  try {
    // 检查源图片是否存在
    if (!fs.existsSync(sourceImagePath)) {
      console.error('❌ 源图片不存在！请将logo图片命名为 logo.png 并放置在 public 目录下');
      console.log('📍 期望路径:', sourceImagePath);
      return;
    }

    // 确保 Tauri icons 目录存在
    if (!fs.existsSync(tauriIconsDir)) {
      fs.mkdirSync(tauriIconsDir, { recursive: true });
      console.log('📁 创建 Tauri icons 目录:', tauriIconsDir);
    }

    console.log('🚀 开始生成 Tauri 图标...');
    console.log('📂 源图片:', sourceImagePath);
    console.log('📂 输出目录:', tauriIconsDir);
    console.log('');

    // 生成所有 PNG 图标
    console.log('📦 生成 PNG 图标:');
    for (const { size, filename, scale = 1 } of tauriIcons) {
      const actualSize = size * scale;
      const outputPath = path.join(tauriIconsDir, filename);
      
      await sharp(sourceImagePath)
        .resize(actualSize, actualSize, {
          fit: 'contain',
          background: { r: 0, g: 0, b: 0, alpha: 0 }
        })
        .png()
        .toFile(outputPath);
      
      console.log(`✅ 生成 ${actualSize}x${actualSize} -> ${filename}`);
    }

    // 生成 ICO 文件 (用于 Windows)
    console.log('\n📦 生成 ICO 文件:');
    const icoSizes = [16, 32, 48, 256]; // ICO 文件包含多种尺寸
    const icoPath = path.join(tauriIconsDir, 'icon.ico');
    
    // 为 ICO 创建多尺寸图像
    const icoBuffers = [];
    for (const size of icoSizes) {
      const buffer = await sharp(sourceImagePath)
        .resize(size, size, {
          fit: 'contain',
          background: { r: 0, g: 0, b: 0, alpha: 0 }
        })
        .png()
        .toBuffer();
      icoBuffers.push(buffer);
    }
    
    // 使用 to-ico 生成真正的 ICO 文件
    const icoData = await toIco(icoBuffers);
    fs.writeFileSync(icoPath, icoData);
    console.log('✅ 生成真正的 icon.ico (包含多种尺寸)');

    // 生成 ICNS 文件 (用于 macOS)
    console.log('\n📦 生成 ICNS 文件:');
    const icnsPath = path.join(tauriIconsDir, 'icon.icns');
    
    // 同样，sharp 不直接支持 ICNS，我们生成最大的 PNG
    await sharp(sourceImagePath)
      .resize(256, 256, {
        fit: 'contain',
        background: { r: 0, g: 0, b: 0, alpha: 0 }
      })
      .png()
      .toFile(icnsPath);
    console.log('✅ 生成 icon.icns (256x256)');

    // 生成通用的 icon.png
    console.log('\n📦 生成通用 icon.png:');
    const iconPath = path.join(tauriIconsDir, 'icon.png');
    await sharp(sourceImagePath)
      .resize(256, 256, {
        fit: 'contain',
        background: { r: 0, g: 0, b: 0, alpha: 0 }
      })
      .png()
      .toFile(iconPath);
    console.log('✅ 生成 icon.png (256x256)');

    console.log('\n🎉 所有 Tauri 图标生成完成！');
    console.log('📋 生成的文件:');
    const generatedFiles = fs.readdirSync(tauriIconsDir);
    generatedFiles.forEach(file => {
      console.log(`   - ${file}`);
    });
    
  } catch (error) {
    console.error('❌ 生成图标时出错:', error.message);
    
    if (error.message.includes('sharp')) {
      console.log('');
      console.log('💡 请先安装 sharp 依赖:');
      console.log('   pnpm add -D sharp');
    }
  }
}

// 运行脚本
generateTauriIcons();